密度函数估计

单个变量的密度函数估计

density函数进行估计

对于一个变量的样本,进行概率密度函数估计,在R语言中,可以用density函数进行密度函数估计,然后用approxfun对密度函数进行估计

df <- approxfun(density(u))
plot(approxfun(density(u)))
plot(density(u))
# 查询某一坐标的概率
df(x)

高斯函数的密度估计

代码

对于已知数据集x=$$$ \lbrace x_i \rbrace $$$,根据高斯核函数$$\textbf{K}(x-x_i)=\frac{1} {\sqrt{2\pi}\theta} exp(-\frac{(x-x_i)^2}{2\theta^2} )$$
求解可以得到概率密度函数的估计

联合概率密度函数的估计

二维联合密度函数分布

R中,若要估计二维联合密度函数,可以使用MASS包中的kde2d函数进行估计,其中默认有25个区间

library(MASS)
set.seed(144)
x <- rnorm(1000)
y <- 5*x + rnorm(1000)
k <- kde2d(x, y, n=25)
# 结果呈现  
image(k)
persp(k,phi=30,theta=20,d=5)
# 热力学图呈现 nlevel代表着分级的阶数
filled.contour(k, nlevels = 33)
# 查找图上某一点的概率
library(fields)
points <- data.frame(x=0:2, y=c(0, 5, 5))
interp.surface(k, points) 

几点说明
* 填充颜色说明:在filled.contour函数中可以加入color.palette=

填充类型 color.palette
1 rainbow
2 heat.colors
3 terrain.colors
4 topo.colors
5 cm.colors
6 grey.colors
7 tim.colors
8 seq

多维联合密度函数估计(小于等于6维)

R中,对于多维变量估计联合密度函数,可以用ks包来对数据进行估计

ks估计概率值

使用ks包中的核密度函数进行估计之后,可以用predict来获取某一点的值,例如:

set.seed(8192)
x <- 2^rnorm(100)
fhat <- kde(x=x, positive=TRUE)
plot(fhat, col=3)
points(c(0.5, 1), predict(fhat, x=c(0.5, 1)))

对于多维函数进行核密度估计:

library(MASS)
data(fgl)
x <- fgl[,c("RI", "Na")]
Chat <- kcopula(x=x)
plot(Chat, disp="filled.contour", thin=3, col="white", border=1)
predict(Chat,x=x[1,])
ks包中高维函数估计

ks包中对于多维函数(>3)的密度估计,使用kde函数进行估计时,需要输入eval.points,对于一维函数,输入的可以是一个向量,但是对于高维函数,eval.points必须是一个list变量

条件概率密度估算

对于连续函数,$$条件概率=\frac {联合概率密度函数的偏导数} {编辑分布函数的偏导数}$$